
package com.hlkj.pay.app.merchant.ext.impl;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import com.hlkj.framework.common.pojo.PageResult;
import com.hlkj.pay.dto.merchant.MerchantAccessInfoPageDto;
import com.hlkj.pay.dto.merchant.MerchantAccessInfoPageQueryDto;
import com.hlkj.pay.infrastructure.model.merchant.*;
import org.springframework.stereotype.Repository;

import com.hlkj.framework.extension.annotation.Extension;
import com.hlkj.pay.app.merchant.ext.MerchantExtConstant;
import com.hlkj.pay.app.merchant.ext.SystemMerchantAccessStatusExtPt;
import com.hlkj.pay.app.merchant.ext.dto.access.SystemMerchantAccessStatusContext;
import com.hlkj.pay.enums.MerchantEnum;
import com.hlkj.pay.service.admin.IAdminUserService;
import com.hlkj.pay.service.merchant.IMerchantAccessService;
import com.hlkj.pay.service.merchant.IMerchantService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * 系统鉴权
 * 
 * @author HlpayTeam
 * @date 2024/09/26 10:25
 */
@Slf4j
@Repository
@RequiredArgsConstructor
@Extension(bizId = MerchantExtConstant.ACCESS_STATUS_SYSTEM_AUTH)
public class SystemAuthMerchantAccessExtPt implements SystemMerchantAccessStatusExtPt {

    private final IMerchantAccessService merchantAccessService;

    private final IMerchantService merchantService;

    private final IAdminUserService adminUserService;

    @Override
    public void merchantAccessStatusProcess(SystemMerchantAccessStatusContext systemMerchantAccessStatusContext) {
        log.info("回写商户状态信息");
        // 先自动通过 之后是人工审核 或者系统审核 看配置
        systemMerchantAccessStatusContext.setAccessStatus(MerchantEnum.ACCESS_STATUS.SUBMIT);
        // 处理成功
        // systemMerchantAccessStatusContext.setProcessStatus(CommonEnum.YES_NO_TYPE.YES);
        // 将第一次提交的信息同步到商户信息中 通过sn查询进件列表 如果列表数量为1 进行数据的回写
        syncMerchantAccess(systemMerchantAccessStatusContext);
        syncMerchantRole(systemMerchantAccessStatusContext);
    }

    void syncMerchantAccess(SystemMerchantAccessStatusContext systemMerchantAccessStatusContext) {
        MerchantAccessInfoDO merchantAccessInfoDO = systemMerchantAccessStatusContext.getMerchantAccessDto().getMerchantAccessInfo();
        MerchantAccessBusinessDO merchantAccessBusiness = systemMerchantAccessStatusContext.getMerchantAccessDto().getMerchantAccessBusiness();
        MerchantAccessLicenseDO merchantAccessLicenseDO = systemMerchantAccessStatusContext.getMerchantAccessDto().getMerchantAccessLicense();
        MerchantAccessCertInfoDO merchantAccessCertDO = systemMerchantAccessStatusContext.getMerchantAccessDto().getMerchantAccessLegal();
        MerchantAccessInfoPageQueryDto merchantAccessInfoPageQueryDto = new MerchantAccessInfoPageQueryDto();
        merchantAccessInfoPageQueryDto.setSn(merchantAccessInfoDO.getSn());
        merchantAccessInfoPageQueryDto.setPageNo(1);
        merchantAccessInfoPageQueryDto.setPageSize(2);
        PageResult<MerchantAccessInfoPageDto> pageDOPageResult = merchantAccessService.queryPage(merchantAccessInfoPageQueryDto);
        List<MerchantAccessInfoPageDto> list = pageDOPageResult.getList();
        if (list.size() > 1) {
            return;
        }
        MerchantInfoDO merchantInfoDO = new MerchantInfoDO();
        merchantInfoDO.setName(merchantAccessInfoDO.getName());
        if(merchantAccessLicenseDO!=null){
            merchantInfoDO.setLicense(merchantAccessLicenseDO.getLicenseCode());
            merchantInfoDO.setLicensePhoto(merchantAccessLicenseDO.getLicenseUrl());
        }
        merchantInfoDO.setShortName(merchantAccessBusiness.getShortName());
        merchantInfoDO.setLegalName(merchantAccessCertDO.getName());
        merchantInfoDO.setLegalIdNum(merchantAccessCertDO.getCertNo());
        merchantInfoDO.setLegalPhone(merchantAccessCertDO.getPhone());
        merchantInfoDO.setLegalAddress(merchantAccessCertDO.getAddress());
        merchantInfoDO.setLegalIdCardFront(merchantAccessCertDO.getCertFrontUrl());
        merchantInfoDO.setLegalIdCardBack(merchantAccessCertDO.getCertBackUrl());
        merchantInfoDO.setType(merchantAccessInfoDO.getType());
        merchantInfoDO.setSn(merchantAccessInfoDO.getSn());
        merchantService.updateMerchantBySn(merchantInfoDO);
    }

    void syncMerchantRole(SystemMerchantAccessStatusContext systemMerchantAccessStatusContext) {
        MerchantAccessInfoDO merchantAccessInfoDO = systemMerchantAccessStatusContext.getMerchantAccessDto().getMerchantAccessInfo();
        // 更新商户管理员角色
        adminUserService.updateMerchantUserRole(merchantAccessInfoDO.getSn());
    }
}
